#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define ALLOCATE_SIZE  20

#define BUFFER_SIZE  20


/*内存泄漏的原因有三个
     1. 野指针
     2. malloc申请的地址没有free释放
     3. 踩内存

*/
int main()
{   
    #if 1
    /*指针必须初始化，如果不初始化就会野指针*/

    /*   void * 是万能指针，可以强转成类似指针类型*/

    /* 在堆上申请空间 */
    char * ptr = (char *)malloc(sizeof(char) * 20);
    if(ptr == NULL)
    {
        perror("malloc error");
      /*程序退出*/
        exit(-1);

        //退出可以用return但不好

    }


    int len = sizeof(ptr);

    printf("len:%d\n", len);


   #if 0 
    strcpy(ptr, "hello world");
    #else 

    /* 使用安全函数strncpy*/
    /*第三个参数减一的作用是保留'\0'使用*/
    strncpy(ptr, "hello worldthrthrthrth", ALLOCATE_SIZE -1);
    #endif
    printf("ptr:%s\n", ptr);
    /*释放内存*/
    free(ptr);
    #elif 0
    




    char ptr[BUFFER_SIZE];
    
    memset(ptr, 0, sizeof(ptr));
    int len = sizeof(ptr);
    printf("len:%d\n", len);// 1*20  = 20


    strcpy(ptr, "hello world");

    printf("ptr:%s\n", ptr);

    #elif0
    /*野指针也是内存泄漏*/
    char  *ptr;
    printf(hello world\n);

   

    
    #endif
    return 0;
}
